from alipay import AliPay
from django.conf import settings
from shopping.settings import APP_PRIVATE_KEY, ALIPAY_PUBLIC_KEY
from alipay import AliPay
from rest_framework.response import Response
from rest_framework.views import APIView


# sdk地址：https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
class AliPays(object):

    # 获取商品支付连接
    def pay(self):
        # 初始化
        app_private_key_string = open(APP_PRIVATE_KEY).read()  # 读取私钥
        alipay_public_key_string = open(ALIPAY_PUBLIC_KEY).read()  # 读取公钥

        # 加密解密
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,  # APPID
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,  # 私钥
            alipay_public_key_string=alipay_public_key_string,  # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True,  # 是否调试模式
        )
        subject = "测试订单"
        order_string = alipay.api_alipay_trade_page_pay(
            qr_pay_mode=False,  # 是否扫码支付
            out_trade_no="201611145",  # 订单号
            total_amount=29999.9,  # 支付金额
            subject=subject,  # 支付商品名称
            # 如需要传更多的字段自己查api

            return_url="",  # 在支付页面支付完成跳转到此页面，可以跳转到商城主页
            notify_url="http://107.191.53.243:80/alipay/return"  # 异步，任意情况下支付时跳转到此页面，以POST形式返回参数
        )

        # 支付连接
        re_url = settings.ALIPAY_URL + order_string
        print(re_url)
        return re_url


# 支付验证
class AliPayView(APIView):
    """
   支付结果
   """

    # def get(self, request):

    def post(self, request):
        data_dict = {}

        for key, value in request.POST.items():
            data_dict[key] = value

        sing = data_dict.pop("sign", None)

        # 读取私钥
        app_private_key_string = open(APP_PRIVATE_KEY).read()
        # 读取公钥
        alipay_public_key_string = open(ALIPAY_PUBLIC_KEY).read()

        alipay = AliPay(
            appid=settings.ALIPAY_APPID,  # APPID
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,  # 私钥
            alipay_public_key_string=alipay_public_key_string,  # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True,  # 是否调试模式
        )

        success = alipay.verify(data_dict, sing)
        print('我是POST')
        print(success)

        if success and data_dict["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
            print('支付成功')
            # order_sn = data_dict.get('order_sn',None)        #我们自己生成的订单号
            # trade_no = data_dict.get('trade_no',None)      #支付宝订单交易号
            # trade_status = data_dict.get('trade_status',None)      #订单状态
            #
            # #更新交易信息
            # existed_OrderInfo =OrderInfo.objects.filter(order_sn=order_sn)
            #
            # for i in existed_OrderInfo:
            #     i.order_sn = order_sn
            #     i.trade_no = trade_no
            #     i.pay_status = trade_status
            #     i.pay_time = datetime.now()     #保存订单完成更新时间
            #     i.save()

            return Response("success")  # 一定要给支付宝返回
